import sys
import time
from PySide2.QtCore import QThread, Signal
from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel


# 自定义线程类，继承自 QThread
class WorkerThread(QThread):
    # 定义一个信号，用于向主线程发送消息
    signal = Signal(str)

    def run(self):
        # 模拟一个耗时任务
        for i in range(5):
            time.sleep(1)
            # 发送信号，传递当前进度信息
            self.signal.emit(f"Task progress: {i + 1}/5")
        # 任务完成后发送完成信息
        self.signal.emit("Task completed!")


class MainWindow(QWidget,QThread):
    # 定义一个信号，用于向主线程发送消息
    signal = Signal(str)
    def run(self):
        # 模拟一个耗时任务
        for i in range(5):
            time.sleep(1)
            # 发送信号，传递当前进度信息
            self.signal.emit(f"Task progress: {i + 1}/5")
        # 任务完成后发送完成信息
        self.signal.emit("Task completed!")


    def __init__(self):
        super().__init__()
        # 创建一个垂直布局
        layout = QVBoxLayout()

        # 创建一个按钮，用于启动任务
        self.start_button = QPushButton("Start Task")
        self.start_button.clicked.connect(self.start_task)
        layout.addWidget(self.start_button)

        # 创建一个标签，用于显示任务进度
        self.status_label = QLabel("Waiting for task...")
        layout.addWidget(self.status_label)

        # 设置窗口布局
        self.setLayout(layout)

    def start_task(self):
        # 创建自定义线程实例
        self.thread = self()
        # 连接线程的信号到更新标签的槽函数
        self.thread.signal.connect(self.update_status)
        # 线程完成后自动销毁
        self.thread.finished.connect(self.thread.deleteLater)
        # 启动线程
        self.thread.start()

    def update_status(self, message):
        # 更新标签的文本，显示任务进度
        self.status_label.setText(message)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())